package com.ecommerce.product.service;

import com.ecommerce.product.dto.ProductCreateRequest;
import com.ecommerce.product.dto.ProductPageResponse;
import com.ecommerce.product.dto.ProductResponse;
import com.ecommerce.product.dto.ProductStatsResponse;
import com.ecommerce.product.dto.ProductUpdateRequest;
import java.util.List;

/**
 * 产品服务接口
 */
public interface ProductService {

    /**
     * 创建产品
     * @param createRequest 创建请求
     * @return 产品响应
     */
    ProductResponse createProduct(ProductCreateRequest createRequest);

    /**
     * 更新产品
     * @param productId 产品ID
     * @param updateRequest 更新请求
     * @return 产品响应
     */
    ProductResponse updateProduct(Long productId, ProductUpdateRequest updateRequest);

    /**
     * 获取产品详情
     * @param productId 产品ID
     * @return 产品响应
     */
    ProductResponse getProductById(Long productId);

    /**
     * 分页获取产品列表
     * @param page 页码
     * @param size 每页大小
     * @return 产品分页响应
     */
    ProductPageResponse getProducts(Integer page, Integer size);

    /**
     * 删除产品
     * @param productId 产品ID
     */
    void deleteProduct(Long productId);

    /**
     * 减少库存
     * @param productId 产品ID
     * @param quantity 数量
     */
    void reduceStock(Long productId, Integer quantity);

    /**
     * 获取热门商品
     * @param limit 限制数量
     * @return 热门商品列表
     */
    List<ProductResponse> getHotProducts(Integer limit);

    /**
     * 搜索产品
     * @param keyword 搜索关键词
     * @param page 页码
     * @param size 每页大小
     * @return 产品分页响应
     */
    ProductPageResponse searchProducts(String keyword, Integer page, Integer size);

    /**
     * 按分类获取产品
     * @param categoryId 分类ID
     * @param page 页码
     * @param size 每页大小
     * @return 产品分页响应
     */
    ProductPageResponse getProductsByCategory(Long categoryId, Integer page, Integer size);

    /**
     * 获取商品统计信息
     * @return 商品统计响应
     */
    ProductStatsResponse getProductStats();
}